/*
 * jlb
 */
package com.jlb.basic.service;

import com.jlb.basic.entity.BasicArea;
import com.jlb.basic.vo.BasicAreaVO;
import com.jlb.core.base.BaseSV;

import java.util.List;
import java.util.Map;

/**
 * 行政区域
 *
 * @author jlb
 */
public interface BasicAreaSV extends BaseSV<BasicArea, Long> {


    /**
     * 根据areaCode获得区域对象
     *
     * @param areaCode 行政区域代码
     * @return BasicArea
     */
    BasicArea load(String areaCode);

    /**
     * 获取所有省份
     *
     * @return List<BasicArea>
     */
    List<BasicArea> listProvoice();

    /**
     * 获取所有指定省下级市
     *
     * @param area_code
     * @return
     */
    public List<BasicArea> listCitysByCode(String area_code);

    /**
     * 获取所有指定市下级县区
     *
     * @param area_code
     * @return
     */
    public List<BasicArea> listCountysByCode(String area_code);

    /**
     * 获取所有指定县区下级乡镇
     *
     * @param area_code
     * @return
     */
    public List<BasicArea> listTownsByCode(String area_code);

    /**
     * 加载所有区域对象至缓存
     *
     * @return
     */
    boolean queryAll2Redis();

    /**
     * 根据area_code 查询对象信息及下级区域信息;
     *
     * @param area_code
     * @return
     */

    Map<String, Object> getBasicAreaInfo(String area_code);

    /**
     * 根据区域编码查询下级信息;
     *
     * @param area_code
     * @param level
     * @return
     */
    List<BasicArea> queryAreasByCode(String area_code, int level);

    /**
     * 根据区域编号修改区域信息（只能修改地区名称）
     *
     * @param areaName 区域名称
     * @param areaCode 区域编码
     */
    void updateNameByCode(String areaCode, String areaName);


    /**
     * 添加区域
     *
     * @param level    区域级别
     * @param areaCode 区域编码
     * @param areaName 区域名称
     */
    void addArea(Integer level, String areaCode, String areaName);

    /**
     * @param area_code
     * @param area_name
     * @return
     */
    List<BasicArea> getAreaByAreaCode(String area_code, String area_name);

    /**
     * @param areaCode
     * @param areaName
     * @param level
     * @return
     */
    boolean isExistArea(String areaCode, String areaName, int level);


    /**
     * 查询指定级别之上的所有对象json串
     *
     * @param level 指定级别
     * @return
     */
    List<BasicAreaVO> queryAreasLevel(int level);

}
